/**
 * 
 */
package fr.afcepf.ai91.qualimetrie.data;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;

import fr.afcepf.ai91.qualimetrie.entity.Personne;
import fr.afcepf.ai91.qualimetrie.util.UtilConnexionAi91;

/**
 * @author Stagiaire
 *
 */
public class DaoPersonneImpl implements IDaoPersonne {
    /**
     * requete pour ajoutre une personne
     * dans la BDD
     */
    private final String reqAjout = "insert into personne (nom, prenom, adresse, date_naissance) values(?,?,?,?)";
    /**
     * indice du parametre nom de la requete
     */
    private final int indiceAjoutNom = 1;
    
    /**
     * indice du parametre prenom de la requete
     */
    private final int indiceAjoutPrenom = 2;
    
    /**
     * indice du parametre adresse de la requete
     */
    private final int indiceAjoutAdresse = 3;
    
    /**
     * indice du parametre date de naissance de la requete
     */
    private final int indiceAjoutDateNaissance = 4;
   
    @Override
    public Personne ajouter(Personne paramPers) {
        Connection cnx = UtilConnexionAi91.getConnection();
        try {
            PreparedStatement pstmt = cnx.prepareStatement(reqAjout, Statement.RETURN_GENERATED_KEYS);
            
            pstmt.setString(indiceAjoutNom, paramPers.getNom());
            pstmt.setString(indiceAjoutPrenom, paramPers.getPrenom());
            pstmt.setDate(indiceAjoutDateNaissance, new java.sql.Date(paramPers.getDateNaissance().getTime()));
            // affecter null au paramètre adresse
            pstmt.setNull(indiceAjoutAdresse, Types.INTEGER);
            //execution de la requtee
            // executeUpdate renvoie un nombre de lignes
            //verif qu'elle a bien rajoute une ligne
            if (pstmt.executeUpdate() == 1) {
                //récupration de la clé primaire generee
                ResultSet rs = pstmt.getGeneratedKeys();
                // on itère sur le resultSet
                if (rs.next()) { // 1 seule ligne donc utilisation de if. Si plusieurs lignes, utilisation de while()
                    //affectation de l'id de la Personne
                    paramPers.setId(rs.getInt(1)); // 1 corresond à nbLigne; ici on a une seul ligne d'où le 1.
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
             // fermeture de la connexion
                cnx.close();
            } catch (SQLException e2) {
                e2.printStackTrace();
            }
        }
        return paramPers;
    }

    @Override
    public Personne associerAdresse(Personne paramPers) {
        
        return null;
    }

}
